package com.gengzp.mq.server.facade;

import com.gengzp.mq.common.model.entity.GengzpMqMessage;

import java.util.Date;
import java.util.List;

/**
 * @ClassName IGengzpMqFacadeService
 * @Description 消息队列模块对外接口
 * @Author gengzp
 * @Date 2025/6/8 20:26
 */
public interface IGengzpMqFacadeService {

    /**
     * 查询需要重试的消息
     *
     * @return 消息集合
     */
    List<GengzpMqMessage> searchNeedRetryMessage(List<Long> ids);

    /**
     * 批量修改消息状态
     *
     * @param messageIds 消息id集合
     * @param status     状态
     */
    void batchEditMessageStatus(List<Long> messageIds, Integer status);

    /**
     * 批量重试消息
     *
     * @param messageIds 消息id集合
     */
    void batchRetryMessages(List<Long> messageIds);

    /**
     * 根据状态查询消息
     *
     * @param status 状态
     * @return 消息集合
     */
    List<GengzpMqMessage> searchMessageByStatus(Integer status);

    /**
     * 批量删除消息
     *
     * @param messageIds 消息id集合
     */
    void batchDeleteMessage(List<Long> messageIds);

    /**
     * 根据主题查询消息
     *
     * @param topics 主题名集合
     * @return 消息集合
     */
    List<GengzpMqMessage> searchMessageByTopics(List<String> topics);

    /**
     * 根据创建时间查询
     *
     * @param createdTimeStart 创建时间-开始
     * @param createdTimeEnd   创建时间-结束
     * @return 消息集合
     */
    List<GengzpMqMessage> searchMessageByCreatedTime(Date createdTimeStart, Date createdTimeEnd);

    /**
     * 根据创建截止时间查询过期消息
     * 该方法不会返回死信队列的消息，只返回正常队列的消息
     *
     * @param createdTimeEnd 创建时间-结束
     * @return 过期消息
     */
    List<GengzpMqMessage> searchTimeoutMessageByCreatedTime(Date createdTimeEnd);

    /**
     * 根据创建时间查询死信队列消息
     *
     * @param createdTimeStart 创建时间-开始
     * @param createdTimeEnd   创建时间-结束
     * @return 消费失败超过3次的消息集合
     */
    List<GengzpMqMessage> searchDeathMessageByCreatedTime(Date createdTimeStart,
                                                          Date createdTimeEnd);

}
